'''
Created on 24-08-2013

@author: Camilo
'''
from PyQt4 import QtGui, QtCore
from Interfaz import Ui_MainWindow
import sys
from Crea_graficas import  MplCanvas
from Crea_graficas3D import  MplCanvas3D
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QTAgg as NavigationToolbar

import psycopg2
import urllib2,zipfile
import time
import glob
from datetime import datetime,timedelta
from datetime import date


from PyQt4.QtCore import QDate
from PyQt4.QtGui import QColor
from PyQt4.QtGui import QTextCharFormat
  

dataBaseName = 'carisma'
userName = 'postgres'
passwordName = 'jugador'

con = None


class Principal(QtGui.QMainWindow):
    #constructor de la clase
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        
        ##instanciar Interfaz
        self.ventana=Ui_MainWindow()
        self.ventana.setupUi(self)
        self.rutaArchivo="";
        
        #valores Grafica
        self.axesX=[]
        self.axesY=[]
        self.axesZ=[]
        
        
        self.connect(self.ventana.btn_Archivos_Comprobar,QtCore.SIGNAL('clicked()'), self.btn_Archivos_Comprobar)
        self.connect(self.ventana.radioButton_Archivos_BaseDatos, QtCore.SIGNAL('clicked()'), self.radioButton_Archivos_BaseDatos)
        self.connect(self.ventana.btn_Archivos_Aceptar, QtCore.SIGNAL('clicked()'), self.btn_Archivos_Aceptar)
        
  
    def btn_Archivos_Aceptar(self):
        
        #xyz = self.ventana.checkBox_Visualizacion_campoxyz.isChecked()
        #x   = self.ventana.checkBox_Visualizacion_campox.isChecked()
        #y   = self.ventana.checkBox_Visualizacion_campoy.isChecked()
        #z   = self.ventana.checkBox_Visualizacion_campoz.isChecked()
        #xy  = self.ventana.checkBox_Visualizacion_campoxy.isChecked()
        #xz  = self.ventana.checkBox_Visualizacion_campoxz.isChecked()
        #yz  = self.ventana.checkBox_Visualizacion_campoyz.isChecked()
               
        self.ventana.dateEdit_Visualizacion_tiempoInicioTotal.setDate()
    
  
    
    def radioButton_Archivos_BaseDatos(self):
        
        self.ventana.comboBox_Archivos_Magnetometro.clear()
        
        try:
            con = psycopg2.connect(database = dataBaseName,user = userName, password = passwordName)
            cur = con.cursor()
            cur.execute("SELECT nombre FROM magnetometro;")
            magnetometros = cur.fetchall()
        
            if magnetometros == None:
                self.ventana.comboBox_Archivos_Magnetometro.addItems("-")
            else:
                for mag in magnetometros:
                    self.ventana.comboBox_Archivos_Magnetometro.addItems(mag)
                
    
        except psycopg2.DatabaseError, e:
            print 'Error lectura magnetometros %s' %e
            sys.exit(1)
    
        finally:
            if con:
                con.close()
    
        
       
    def btn_Archivos_Comprobar(self):
        
        color =  QTextCharFormat()
        color.setBackground(QtGui.QBrush(QtGui.QColor("lightgreen")))
           
        
        if(self.ventana.radioButton_Archivos_BaseDatos.isChecked()):

            
            calendarioInicio= self.ventana.calendarWidget
            calendarioFinal = self.ventana.calendarWidget_2
            
            magnetometro= self.ventana.comboBox_Archivos_Magnetometro.currentText()
            
            if(magnetometro!=None and magnetometro!="-"):
                try:
                    con = psycopg2.connect(database = dataBaseName,user = userName, password = passwordName)
                    cur = con.cursor()
                    cur.execute("select EXTRACT(YEAR FROM fecha),EXTRACT(MONTH FROM fecha),EXTRACT(DAY FROM fecha)  from resumen_fechas where magnetometro_nombre='"+str(magnetometro)+"'")
                    
                    fechaInicial = cur.fetchone()
                    fechas = cur.fetchall()
                    
                    anio= int(fechaInicial[0])
                    mes = int(fechaInicial[1])
                    dia = int(fechaInicial[2])
                    
                    calendarioInicio.setMinimumDate(QDate(anio,mes,dia))
                    calendarioFinal.setMinimumDate(QDate(anio,mes,dia))
                    
                    for fecha in fechas:
                        
                        anio= int(fecha[0])
                        mes = int(fecha[1])
                        dia = int(fecha[2])
                        fechaMagnetometro = QDate(anio,mes,dia)
                        calendarioInicio.setDateTextFormat(fechaMagnetometro, color)
            
                    calendarioInicio.setMaximumDate(fechaMagnetometro)
                    calendarioFinal.setMaximumDate(fechaMagnetometro)
                    
                except psycopg2.DatabaseError, e:
                    print 'Error lectura magnetometros %s' %e
                    sys.exit(1)
    
                finally:
                    if con:
                        con.close()
    
    
            
            
            
        
        
        if(self.ventana.radioButton_Archivos_ArchivoExterno.isChecked()):
            print "camilo"
            
        
            for fecha in fechas:
                        
                anio= int(fecha[0])
                mes = int(fecha[1])
                dia = int(fecha[2])
                fechaMagnetometro = QDate(anio,mes,dia)
                calendarioInicio.setDateTextFormat(fechaMagnetometro, color)
            
            
        """
    
        #conexion con slots
        #*componente recibe*.connect(*componente interfaz que lo genere*, *senyal esperada* , *slot o accion a realizar*)
        self.ventana.QLay_ejeX.connect(self.ventana.btnGraficarX, QtCore.SIGNAL('clicked()'), self.setGraphComponentX) 
        self.ventana.QLay_ejeY.connect(self.ventana.btnGraficarY, QtCore.SIGNAL('clicked()'), self.setGraphComponentY)
        self.ventana.QLay_ejeZ.connect(self.ventana.btnGraficarZ, QtCore.SIGNAL('clicked()'), self.setGraphComponentZ)
        
        self.ventana.GLay_3D.connect(self.ventana.btnGrafica3D, QtCore.SIGNAL('clicked()'), self.setGraph3D)
        
        #Archivos
        self.connect(self.ventana.btnAbrirArchivo, QtCore.SIGNAL('clicked()'),self.openFile)
        self.connect(self.ventana.btnPeriodo, QtCore.SIGNAL('clicked()'),self.leerPeriodo)        
        
    #definicion de acciones a realizar;
    def setGraphComponentX(self):
            self.Canvas=MplCanvas(self.axesX)
            self.ventana.QLay_ejeX.addWidget(self.Canvas)
            self.NavigTool= NavigationToolbar(self.Canvas, self)
            self.ventana.QWidNavigationTool_ejex.addWidget(self.NavigTool)
            
            
    def setGraphComponentY(self):
            self.Canvas=MplCanvas(self.axesY)
            self.ventana.QLay_ejeY.addWidget(self.Canvas)
            self.NavigTool= NavigationToolbar(self.Canvas, self)
            self.ventana.QWidNavigationTool_ejey.addWidget(self.NavigTool)
    
    def setGraphComponentZ(self):
            self.Canvas=MplCanvas(self.axesZ)
            self.ventana.QLay_ejeZ.addWidget(self.Canvas)
            self.NavigTool= NavigationToolbar(self.Canvas, self)
            self.ventana.QWidNavigationTool_ejez.addWidget(self.NavigTool)   
             
    def setGraph3D(self):
            self.Canvas=MplCanvas3D(self.readingFile.ejex, self.readingFile.ejey, self.readingFile.ejez)
            self.ventana.GLay_3D.addWidget(self.Canvas)
             
    def leerPeriodo(self):
        QtGui.QMessageBox.information(self,'Periodo seleccionado', "magnetometro GILL, anio 2007", QtGui.QMessageBox.Ok);
        periodoLeido=Archivos.LeerPeriodo.leerArchivos();
        periodoLeido.abrirDirectorioArchivos();
        periodoLeido.calcPromedios(500);
        
        self.axesX=periodoLeido.promEjeX;
        self.axesY=periodoLeido.promEjeY;
        self.axesZ=periodoLeido.promEjeZ;
            
    def openFile(self):
        try:
            refArchivo=""
            refArchivo = QtGui.QFileDialog.getOpenFileName(self, "Abrir Archivo", "C:\Users\Camilo\Documents\CARISMA")
            self.rutaArchivo=str(refArchivo)
        except:
            print "No es posible accesar el archivo"
                   
        if refArchivo != None:
            QtGui.QMessageBox.information(self,'Archivo seleccionado',"Ubicacion: "+str(refArchivo),QtGui.QMessageBox.Ok);
            self.readingFile= Archivos.LeerArchivo.FileRead()
            self.readingFile.openFile(self.rutaArchivo, self.ventana)
            self.readingFile.readFile()
            self.readingFile.closeArchivo();
            self.axesX=self.readingFile.ejex;
            self.axesY=self.readingFile.ejey;
            self.axesZ=self.readingFile.ejez;
            
            """
       
        
        
## Metodo main principal
app=QtGui.QApplication(sys.argv)
framePrincipal=Principal()
framePrincipal.show()
sys.exit(app.exec_())
